import cv2
import numpy as np

# 1. 读取图像
img = cv2.imread("../images/3channels.jpg")

# 2. 转换HSV颜色空间 便于判断
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

# 3. 利用inrange函数，制作颜色识别的掩膜
# 3.1 首先先来指定红色的最低值和最高值
red_min1 = np.array([0, 43, 46])
red_max1 = np.array([10, 255, 255])
red_min2 = np.array([156, 43, 46])
red_max2 = np.array([180, 255, 255])
# 3.2 制作掩膜  【其值要么是255 要么是0】
mask1 = cv2.inRange(
    img_hsv,
    red_min1,
    red_max1
)
mask2 = cv2.inRange(
    img_hsv,
    red_min2,
    red_max2
)
mask = mask1 + mask2
# 3.3 显示得到的掩膜
cv2.imshow('mask', mask)

# 4. 将制作好的掩膜【筛选到的颜色】 与 原图 进行按位与运算
recognition_color_img = cv2.bitwise_and(
    img,
    img,
    mask=mask
)
cv2.imshow("recognition_color_img", recognition_color_img)

# 5. 进行颜色替换
# 方法1：循环遍历掩膜中的每一个像素点，若像素点是255，说明是符合的颜色，做替换即可
# for i in range(mask.shape[0]):
#     for j in range(mask.shape[1]):
#         if mask[i, j] == 255:
#             img[i, j, :] = (0, 255, 0)

# 方法2：直接使用ndarray的筛选
img[mask == 255] = (0, 255, 0)

cv2.imshow("im age", img)
cv2.waitKey(0)